export default class VirtualTryOn {
    /**
     * @param {object} options
     * @param {string} options.container - 包含AR视图的CSS选择器, e.g., '#ar-container'
     * @param {string} options.iframeUrl - 原始mindar-build/index.html的路径
     * @param {string} options.swUrl - Service Worker脚本的路径
     * @param {string} options.modelBaseUrl - 云端模型文件夹的URL
     */
    constructor(options) {
        this.container = document.querySelector(options.container);
        this.iframeUrl = options.iframeUrl;
        this.swUrl = options.swUrl;
        this.modelBaseUrl = options.modelBaseUrl;
        this.iframe = null;

        if (!this.container) {
            console.error('Container not found!');
            return;
        }

        this._registerServiceWorker().then(() => {
            this._createIframe();
        });
    }

    // 注册Service Worker
    async _registerServiceWorker() {
        if ('serviceWorker' in navigator) {
            try {
                const registration = await navigator.serviceWorker.register(this.swUrl);
                console.log('Service Worker注册成功, 范围:', registration.scope);
            } catch (error) {
                console.error('Service Worker注册失败:', error);
            }
        } else {
            console.error('此浏览器不支持Service Worker。');
        }
    }

    _createIframe() {
        this.iframe = document.createElement('iframe');
        this.iframe.src = this.iframeUrl;
        this.iframe.style.cssText = 'width: 100%; height: 100%; border: none;';
        this.container.innerHTML = '';
        this.container.appendChild(this.iframe);
    }

    /**
     * 通过唯一ID切换模型
     * @param {string} modelId 
     */
    switchModelById(modelId) {
        // 检查全局controller是否存在
        if (navigator.serviceWorker.controller) {
            this._sendMessageToSW(modelId, navigator.serviceWorker.controller);
        } else {
            // 如果不存在（常见于首次加载），则等待Service Worker准备就绪
            navigator.serviceWorker.ready.then((registration) => {
                // 关键改动：使用 registration.active 作为 controller 传入
                // registration.active 指向当前已激活的Service Worker
                if (registration.active) {
                    this._sendMessageToSW(modelId, registration.active);
                } else {
                    console.error("Service Worker已就绪，但没有激活的controller。");
                }
            });
        }
    }
    
    /**
     * 将消息发送逻辑提取为一个独立方法
     * @param {string} modelId
     * @param {ServiceWorker} controller - 明确传入要通信的controller
     */
    _sendMessageToSW(modelId, controller) {
        const fullModelUrl = `${this.modelBaseUrl}${modelId}/_x1`;

        // 使用传入的controller对象发送消息
        controller.postMessage({
            type: 'SET_TARGET_MODEL',
            url: fullModelUrl
        });
        
        console.log(`SDK: 已向Service Worker下达指令，目标为 ${fullModelUrl}`);
        
        if(this.iframe) {
            // 重新加载iframe以触发新的fetch请求
            this.iframe.contentWindow.location.reload();
        }
    }
}